/*     */ package dm.jdbc.driver;
/*     */ 
/*     */ import dm.jdbc.dataConvertion.Convertion;
/*     */ import dm.jdbc.dbaccess.Const;
/*     */ import dm.jdbc.dbaccess.DBError;
/*     */ import dm.jdbc.desc.LobDesc;
/*     */ import dm.jdbc.innerData.DmdbConnAgent;
/*     */ import java.io.InputStream;
/*     */ import java.io.OutputStream;
/*     */ import java.io.Reader;
/*     */ import java.io.Writer;
/*     */ import java.sql.Clob;
/*     */ import java.sql.SQLException;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public class DmdbClob
/*     */   extends DmdbLob
/*     */   implements Clob
/*     */ {
/*  51 */   String m_serverEncoding = null;
/*     */   
/*     */   public DmdbClob(byte[] value, LobDesc lobDesc, DmdbConnection_bs conn, boolean updAble)
/*     */   {
/*  55 */     super(value, (byte)1, lobDesc, conn, updAble);
/*     */     
/*  57 */     this.m_serverEncoding = conn.getServerEncoding();
/*     */   }
/*     */   
/*     */   public DmdbClob(byte[] bs, DmdbConnection_bs conn) throws SQLException {
/*  61 */     super(bs, conn);
/*  62 */     this.m_serverEncoding = conn.getServerEncoding();
/*     */   }
/*     */   
/*     */   public DmdbClob(DmdbConnAgent rConn) {
/*  66 */     super(null, rConn.getRealConn());
/*  67 */     this.m_serverEncoding = this.m_conn.getServerEncoding();
/*     */   }
/*     */   
/*     */   public static DmdbClob getEmptyClob()
/*     */   {
/*  72 */     return new DmdbClob(new DmdbConnAgent(new DmdbConnection_bs()));
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public long length()
/*     */     throws SQLException
/*     */   {
/*  92 */     checkFreed();
/*     */     
/*  94 */     if (Const.TRACE_LEVEL > 0) {
/*  95 */       DmdbLog.trace(this, "length()", "");
/*     */     }
/*     */     
/*  98 */     long len = 0L;
/*     */     
/* 100 */     if (this.m_lobMode == 2) {
/* 101 */       String str = Convertion.getString(this.m_value, this.m_hdr_size, 
/* 102 */         this.m_value.length - this.m_hdr_size, this.m_serverEncoding);
/* 103 */       return str.length();
/*     */     }
/*     */     
/*     */ 
/* 107 */     if ((isValueInRow()) || (isValueInRow())) {
/* 108 */       byte[] buf = getValueInRow();
/* 109 */       String str = Convertion.getString(buf, 0, buf.length, 
/* 110 */         this.m_serverEncoding);
/*     */       
/* 112 */       return str.length();
/*     */     }
/*     */     
/* 115 */     if (this.offRowLen == -1L) {
/* 116 */       checkConnClosed();
/* 117 */       len = DmdbCSI.lob_get_len(this);
/*     */       
/* 119 */       if (len < 0L) {
/* 120 */         DBError.throwSQLException(6057);
/*     */       }
/* 122 */       this.offRowLen = len;
/* 123 */       return len;
/*     */     }
/* 125 */     return this.offRowLen;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public String getSubString(long pos, int length)
/*     */     throws SQLException
/*     */   {
/* 158 */     checkFreed();
/* 159 */     if ((pos <= 0L) || (length < 0)) {
/* 160 */       DBError.throwSQLException(6057);
/*     */     }
/* 162 */     if (Const.TRACE_LEVEL > 0) {
/* 163 */       DmdbLog.trace(this, "getSubString(long, int)", "pos = " + pos + 
/* 164 */         ", length = " + length);
/*     */     }
/*     */     
/*     */ 
/* 168 */     String tmpBuf = null;
/* 169 */     String str = "";
/* 170 */     int maxTextLen = 32000;
/*     */     
/*     */ 
/* 173 */     if (this.m_lobMode == 2) {
/* 174 */       str = Convertion.getString(this.m_value, this.m_hdr_size, this.m_value.length - 
/* 175 */         this.m_hdr_size, this.m_serverEncoding);
/*     */       
/* 177 */       if (pos > str.length()) {
/* 178 */         return "";
/*     */       }
/* 180 */       if (str.length() < pos - 1L + length)
/* 181 */         return str.substring((int)pos - 1);
/* 182 */       return str.substring((int)pos - 1, (int)(pos - 1L + length));
/*     */     }
/*     */     
/*     */ 
/* 186 */     if (isValueInRow()) {
/* 187 */       byte[] buf = getValueInRow();
/* 188 */       str = Convertion.getString(buf, 0, buf.length, this.m_serverEncoding);
/*     */       
/* 190 */       if (pos > str.length()) {
/* 191 */         return "";
/*     */       }
/* 193 */       if (str.length() < pos - 1L + length)
/* 194 */         return str.substring((int)pos - 1);
/* 195 */       return str.substring((int)pos - 1, (int)(pos - 1L + length));
/*     */     }
/*     */     
/* 198 */     if (this.fromRowSetFlag) {
/* 199 */       DBError.throwUnsupportedSQLException();
/* 200 */       return null; }
/*     */     int len;
/*     */     int len;
/* 203 */     if (length > maxTextLen) {
/* 204 */       len = maxTextLen;
/*     */     } else {
/* 206 */       len = length;
/*     */     }
/*     */     
/* 209 */     int position = (int)pos - 1;
/* 210 */     int charsGet = 0;
/*     */     for (;;) {
/* 212 */       checkConnClosed();
/* 213 */       tmpBuf = DmdbCSI.text_get_subString(this, (byte)1, 
/* 214 */         position, len);
/*     */       
/*     */ 
/* 217 */       if (tmpBuf == null) {
/*     */         break;
/*     */       }
/*     */       
/* 221 */       str = str + tmpBuf;
/* 222 */       position += tmpBuf.length();
/* 223 */       charsGet += tmpBuf.length();
/*     */       
/*     */ 
/* 226 */       len = length - charsGet;
/* 227 */       if (len <= 0) {
/*     */         break;
/*     */       }
/* 230 */       if (len > maxTextLen) {
/* 231 */         len = maxTextLen;
/*     */       }
/*     */     }
/*     */     
/* 235 */     return str;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public Reader getCharacterStream()
/*     */     throws SQLException
/*     */   {
/* 258 */     checkFreed();
/* 259 */     if (Const.TRACE_LEVEL > 0) {
/* 260 */       DmdbLog.trace(this, "getCharacterStream()", "");
/*     */     }
/*     */     
/* 263 */     return new DmdbReader(this);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public InputStream getAsciiStream()
/*     */     throws SQLException
/*     */   {
/* 285 */     checkFreed();
/* 286 */     if (Const.TRACE_LEVEL > 0) {
/* 287 */       DmdbLog.trace(this, "getAsciiStream()", "");
/*     */     }
/* 289 */     return new DmdbInputStream(this, this.fromRowSetFlag, this.m_serverEncoding);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public long position(String searchstr, long start)
/*     */     throws SQLException
/*     */   {
/* 321 */     checkFreed();
/*     */     
/* 323 */     if (Const.TRACE_LEVEL > 0) {
/* 324 */       DmdbLog.trace(this, "position(String, long)", "searchstr = " + 
/* 325 */         searchstr + ", start = " + start);
/*     */     }
/*     */     
/* 328 */     if ((this.fromRowSetFlag) || (start < 1L)) {
/* 329 */       DBError.throwSQLException(6057);
/*     */     }
/* 331 */     long length = length();
/* 332 */     if (searchstr.length() > length - start + 1L) {
/* 333 */       return -1L;
/*     */     }
/*     */     
/* 336 */     String valStr = getSubString(start, (int)(length - start + 1L));
/* 337 */     if (valStr.length() < length - start + 1L) {
/* 338 */       return -1L;
/*     */     }
/* 340 */     long indexOf = valStr.indexOf(searchstr);
/* 341 */     if (indexOf >= 0L) {
/* 342 */       indexOf += 1L;
/*     */     }
/*     */     
/* 345 */     return indexOf;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public long position(Clob searchstr, long start)
/*     */     throws SQLException
/*     */   {
/* 376 */     checkFreed();
/*     */     
/* 378 */     if ((this.fromRowSetFlag) || (start < 1L)) {
/* 379 */       DBError.throwSQLException(6057);
/*     */     }
/* 381 */     String toSearch = searchstr.getSubString(1L, (int)searchstr.length());
/*     */     
/* 383 */     return position(toSearch, start);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public int setString(long pos, String str)
/*     */     throws SQLException
/*     */   {
/* 419 */     checkFreed();
/* 420 */     return setString(pos, str, 0, str.length());
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public int setString(long pos, String str, int offset, int len)
/*     */     throws SQLException
/*     */   {
/* 462 */     checkFreed();
/*     */     
/* 464 */     if (Const.TRACE_LEVEL > 0) {
/* 465 */       DmdbLog.trace(this, "setString(long, String, int, int)", "pos = " + 
/* 466 */         pos + ", str = " + str + ", offset = " + offset + 
/* 467 */         ", len = " + len);
/*     */     }
/*     */     
/* 470 */     if ((pos <= 0L) || (offset < 0) || (len < 0) || (offset + len > str.length())) {
/* 471 */       DBError.throwSQLException(6057);
/*     */     }
/* 473 */     if ((!this.fromRowSetFlag) && (!this.m_updatAble)) {
/* 474 */       DBError.throwSQLException(6029);
/*     */     }
/* 476 */     if (this.m_lobMode == 2) {
/* 477 */       setClobInRow(pos, str, offset, len);
/* 478 */       this.isUpdated = true;
/* 479 */       return len;
/*     */     }
/*     */     
/* 482 */     if (this.fromRowSetFlag) {
/* 483 */       setClobInRow(pos, str, offset, len);
/* 484 */       return len;
/*     */     }
/*     */     
/*     */ 
/* 488 */     int ret = 0;
/* 489 */     int maxTextLen = 8000;
/*     */     
/*     */ 
/* 492 */     byte[] buf = Convertion.getBytes(str, offset, len, this.m_serverEncoding);
/*     */     
/* 494 */     int position = (int)pos - 1;
/* 495 */     int off = 0;
/* 496 */     int len1 = buf.length;
/*     */     int length;
/* 498 */     int length; if (len1 > maxTextLen) {
/* 499 */       length = maxTextLen;
/*     */     } else {
/* 501 */       length = len1;
/*     */     }
/* 503 */     int count = len1 / maxTextLen + 1;
/*     */     
/* 505 */     ret = 0;
/* 506 */     byte firstOrLast = 0;
/* 507 */     for (int i = 0; i < count; i++) {
/* 508 */       if ((i == 0) && (i == count - 1)) {
/* 509 */         firstOrLast = 3;
/* 510 */       } else if (i == 0) {
/* 511 */         firstOrLast = 1;
/* 512 */       } else if (i == count - 1) {
/* 513 */         firstOrLast = 2;
/*     */       } else {
/* 515 */         firstOrLast = 0;
/*     */       }
/* 517 */       checkConnClosed();
/* 518 */       int tmp = DmdbCSI.lob_set_bytes(this, (byte)1, position, buf, 
/* 519 */         off, length, firstOrLast);
/*     */       
/* 521 */       if (tmp <= 0) {
/* 522 */         return ret;
/*     */       }
/* 524 */       ret += tmp;
/*     */       
/* 526 */       position += tmp;
/* 527 */       off += length;
/*     */       
/* 529 */       if (i == count - 2) {
/* 530 */         length = len1 - off;
/*     */       } else {
/* 532 */         length = maxTextLen;
/*     */       }
/*     */     }
/*     */     
/* 536 */     short groupid = Convertion.getShort(getLobLocator().m_data_groupId, 0);
/* 537 */     if (groupid == -1)
/*     */     {
/* 539 */       setClobInRow(pos, str, offset, len);
/*     */     } else {
/* 541 */       this.m_value[0] = 2;
/* 542 */       this.offRowLen = -1L;
/*     */     }
/*     */     
/* 545 */     this.isUpdated = true;
/* 546 */     return ret;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public OutputStream setAsciiStream(long pos)
/*     */     throws SQLException
/*     */   {
/* 574 */     checkFreed();
/* 575 */     if ((this.m_conn != null) && 
/* 576 */       (this.m_conn.getComOra()) && (pos == 0L)) {
/* 577 */       pos = 1L;
/*     */     }
/*     */     
/* 580 */     if (pos <= 0L) {
/* 581 */       DBError.throwSQLException(6057);
/*     */     }
/* 583 */     if (Const.TRACE_LEVEL > 0) {
/* 584 */       DmdbLog.trace(this, "setAsciiStream(long)", "pos = " + pos);
/*     */     }
/*     */     
/* 587 */     return new DmdbOutputStream(this, pos); }
/*     */   
/*     */   /**
/*     */    * @deprecated
/*     */    */
/* 592 */   public OutputStream getAsciiOutputStream() throws SQLException { return setAsciiStream(1L); }
/*     */   
/*     */   /**
/*     */    * @deprecated
/*     */    */
/*     */   public OutputStream getAsciiOutputStream(long pos) throws SQLException {
/* 598 */     return setAsciiStream(pos);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public Writer setCharacterStream(long pos)
/*     */     throws SQLException
/*     */   {
/* 627 */     checkFreed();
/* 628 */     if ((this.m_conn != null) && 
/* 629 */       (this.m_conn.getComOra()) && (pos == 0L)) {
/* 630 */       pos = 1L;
/*     */     }
/*     */     
/* 633 */     if (pos <= 0L) {
/* 634 */       DBError.throwSQLException(6057);
/*     */     }
/* 636 */     if (Const.TRACE_LEVEL > 0) {
/* 637 */       DmdbLog.trace(this, "setCharacterStream(long)", "pos = " + pos);
/*     */     }
/*     */     
/* 640 */     return new DmdbClobWriter(this, pos);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public void truncate(long len)
/*     */     throws SQLException
/*     */   {
/* 664 */     checkFreed();
/* 665 */     if (len < 0L) {
/* 666 */       DBError.throwSQLException(6057);
/*     */     }
/* 668 */     if (Const.TRACE_LEVEL > 0) {
/* 669 */       DmdbLog.trace(this, "truncate(long)", "len = " + len);
/*     */     }
/*     */     
/* 672 */     if (this.m_lobMode == 2) {
/* 673 */       truncateClobInRow(len);
/* 674 */       this.isUpdated = true;
/* 675 */       return;
/*     */     }
/*     */     
/* 678 */     if ((this.fromRowSetFlag) || (!this.m_updatAble)) {
/* 679 */       DBError.throwSQLException(6029);
/*     */     }
/*     */     
/* 682 */     checkConnClosed();
/* 683 */     DmdbCSI.blob_text_truncate(this, (byte)1, (int)len);
/*     */     
/* 685 */     short groupid = Convertion.getShort(getLobLocator().m_data_groupId, 0);
/* 686 */     if (groupid == -1)
/*     */     {
/* 688 */       truncateClobInRow(len);
/*     */     } else {
/* 690 */       this.offRowLen = len;
/*     */     }
/* 692 */     this.isUpdated = true;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public byte[] getBytes(long pos, int length)
/*     */     throws SQLException
/*     */   {
/* 709 */     checkFreed();
/* 710 */     if ((pos <= 0L) || (length < 0)) {
/* 711 */       DBError.throwSQLException(6057);
/*     */     }
/* 713 */     if (Const.TRACE_LEVEL > 0) {
/* 714 */       DmdbLog.trace(this, "getBytes(long, int)", "pos = " + pos + 
/* 715 */         ", length = " + length);
/*     */     }
/*     */     
/* 718 */     byte[] buf = new byte[length];
/*     */     
/* 720 */     if (this.m_lobMode == 2) {
/* 721 */       if (pos > this.m_value.length - this.m_hdr_size) {
/* 722 */         return null;
/*     */       }
/* 724 */       if (this.m_value.length - this.m_hdr_size - pos + 1L < length) {
/* 725 */         buf = new byte[(int)(this.m_value.length - this.m_hdr_size - pos + 1L)];
/*     */       }
/* 727 */       System.arraycopy(this.m_value, (int)pos - 1 + this.m_hdr_size, buf, 0, 
/* 728 */         buf.length);
/*     */       
/* 730 */       return buf;
/*     */     }
/*     */     
/*     */ 
/* 734 */     if ((isValueInRow()) && (
/* 735 */       (this.fromRowSetFlag) || (!this.m_updatAble) || ((this.m_updatAble) && (!this.isUpdated)))) {
/* 736 */       byte[] val = getValueInRow();
/*     */       
/* 738 */       if (pos > length()) {
/* 739 */         return null;
/*     */       }
/* 741 */       if (val.length - pos + 1L <= length) {
/* 742 */         buf = new byte[(int)(val.length - pos + 1L)];
/*     */       }
/* 744 */       System.arraycopy(val, (int)(pos - 1L), buf, 0, buf.length);
/*     */       
/* 746 */       return buf;
/*     */     }
/*     */     
/* 749 */     return getBytesOffRow(pos, length);
/*     */   }
/*     */   
/*     */   public byte[] getBytesOffRow(long pos, int length) throws SQLException {
/* 753 */     checkFreed();
/* 754 */     if ((pos <= 0L) || (length < 0)) {
/* 755 */       DBError.throwSQLException(6057);
/*     */     }
/*     */     
/* 758 */     byte[] tmpBuf = null;
/* 759 */     byte[] buf = new byte[length];
/*     */     
/* 761 */     int count = length / 32000 + 1;
/*     */     int len;
/* 763 */     int len; if (length > 32000) {
/* 764 */       len = 32000;
/*     */     } else {
/* 766 */       len = length;
/*     */     }
/*     */     
/* 769 */     int position = (int)pos - 1;
/* 770 */     int offset = 0;
/* 771 */     for (int i = 0; i < count; i++) {
/* 772 */       checkConnClosed();
/* 773 */       tmpBuf = 
/* 774 */         DmdbCSI.lob_get_bytes(this, (byte)0, position, len);
/*     */       
/* 776 */       if (tmpBuf == null) {
/*     */         break;
/*     */       }
/*     */       
/* 780 */       System.arraycopy(tmpBuf, 0, buf, offset, tmpBuf.length);
/*     */       
/* 782 */       position += tmpBuf.length;
/* 783 */       offset += tmpBuf.length;
/*     */       
/*     */ 
/* 786 */       len = length - offset;
/* 787 */       if (len <= 0) {
/*     */         break;
/*     */       }
/* 790 */       if (len > 32000) {
/* 791 */         len = 32000;
/*     */       }
/*     */     }
/*     */     
/* 795 */     if (offset == length) {
/* 796 */       return buf;
/*     */     }
/* 798 */     byte[] tmpVal = new byte[offset];
/* 799 */     System.arraycopy(buf, 0, tmpVal, 0, offset);
/* 800 */     return tmpVal;
/*     */   }
/*     */   
/*     */ 
/*     */   private void setClobInRow(long pos, String str, int offset, int len)
/*     */     throws SQLException
/*     */   {
/* 807 */     int length = getLobLen();
/* 808 */     if (pos > length + 1) {
/* 809 */       throw new IndexOutOfBoundsException(new Long(pos).toString());
/*     */     }
/*     */     
/* 812 */     this.m_value[0] = 1;
/*     */     
/* 814 */     String s1 = Convertion.getString(this.m_value, this.m_hdr_size, length, 
/* 815 */       this.m_serverEncoding);
/*     */     String s;
/* 817 */     String s; if (pos + len <= s1.length()) {
/* 818 */       String s2 = s1.substring(0, (int)(pos - 1L));
/* 819 */       String s3 = s1.substring((int)(pos - 1L + len));
/* 820 */       String s4 = str.substring(offset, offset + len);
/* 821 */       s = s2.concat(s4).concat(s3);
/*     */     } else {
/* 823 */       String s2 = s1.substring(0, (int)(pos - 1L));
/* 824 */       String s3 = str.substring(offset, offset + len);
/* 825 */       s = s2.concat(s3);
/*     */     }
/*     */     
/* 828 */     byte[] tmp = Convertion.getBytes(s, this.m_serverEncoding);
/* 829 */     byte[] newValue = new byte[tmp.length + this.m_hdr_size];
/* 830 */     System.arraycopy(this.m_value, 0, newValue, 0, this.m_hdr_size);
/* 831 */     System.arraycopy(tmp, 0, newValue, this.m_hdr_size, tmp.length);
/* 832 */     Convertion.setInt(newValue, 9, tmp.length);
/* 833 */     this.m_value = newValue;
/*     */   }
/*     */   
/*     */   private void truncateClobInRow(long len) throws SQLException {
/* 837 */     String s1 = Convertion.getString(this.m_value, this.m_hdr_size, getLobLen(), 
/* 838 */       this.m_serverEncoding);
/*     */     
/* 840 */     if (len > s1.length()) {
/* 841 */       DBError.throwSQLException(6057);
/*     */     }
/* 843 */     String s2 = s1.substring(0, (int)len);
/* 844 */     byte[] tmp = Convertion.getBytes(s2, this.m_serverEncoding);
/*     */     
/* 846 */     byte[] newValue = new byte[tmp.length + this.m_hdr_size];
/* 847 */     System.arraycopy(this.m_value, 0, newValue, 0, this.m_hdr_size);
/* 848 */     System.arraycopy(tmp, 0, newValue, this.m_hdr_size, tmp.length);
/* 849 */     Convertion.setInt(newValue, 9, tmp.length);
/* 850 */     this.m_value = newValue;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public void free()
/*     */     throws SQLException
/*     */   {
/* 867 */     if (Const.TRACE_LEVEL > 0) {
/* 868 */       DmdbLog.trace(this, "free()", "");
/*     */     }
/*     */     
/* 871 */     super.free();
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public Reader getCharacterStream(long pos, long length)
/*     */     throws SQLException
/*     */   {
/* 895 */     checkFreed();
/*     */     
/* 897 */     if (Const.TRACE_LEVEL > 0) {
/* 898 */       DmdbLog.trace(this, "getCharacterStream(long, long)", "pos = " + 
/* 899 */         pos + ", length = " + length);
/*     */     }
/*     */     
/* 902 */     return new DmdbReader(this, pos, length);
/*     */   }
/*     */ }


/* Location:              D:\Program Files\DBMS_20150813\jdbc\Dm7JdbcDriver17.jar!\dm\jdbc\driver\DmdbClob.class
 * Java compiler version: 2 (46.0)
 * JD-Core Version:       0.7.1
 */